/**
 * 时间格式化工具函数
 * @param {Date|string|number} timestamp - 支持 Date对象、时间戳字符串或数值
 * @param {Object} [options] - 配置选项
 * @param {string} [options.dateFormat='yyyy-MM-dd'] - 日期格式
 * @param {boolean} [options.showTime=false] - 长期显示时是否包含时间
 * @returns {string} 格式化后的时间文本
 */
export function formatTimeAgo(timestamp, options = {}) {
  const { dateFormat = 'yyyy-MM-dd', showTime = false } = options;

  // 转换为 Date 对象
  const date = new Date(timestamp);
  if (isNaN(date)) return '无效时间';

  const now = new Date();
  const diffInSeconds = Math.floor((now - date) / 1000);

  // 时间单位换算
  const timeUnits = [
    { limit: 60, text: '秒前' },
    { limit: 3600, text: '分钟前', divisor: 60 },
    { limit: 86400, text: '小时前', divisor: 3600 }, // 1天内显示为小时前
    { limit: 604800, text: '天前', divisor: 86400 }, // 7天内显示为天前
  ];

  // 处理相对时间
  for (const unit of timeUnits) {
    if (diffInSeconds < unit.limit) {
      const value = Math.floor(diffInSeconds / (unit.divisor || 1));
      return `${value}${unit.text}`;
    }
  }

  // 超过7天显示具体日期
  return formatDate(date, dateFormat, showTime);
}

/**
 * 日期格式化辅助函数
 */
function formatDate(date, format = 'yyyy-MM-dd', showTime = false) {
  const pad = n => n.toString().padStart(2, '0');

  const timeStr = showTime
    ? ` ${pad(date.getHours())}:${pad(date.getMinutes())}`
    : '';

  return format
    .replace('yyyy', date.getFullYear())
    .replace('MM', pad(date.getMonth() + 1))
    .replace('dd', pad(date.getDate()))
    + timeStr;
}

// 使用示例
// console.log(formatTimeAgo(new Date())); // 0秒前
// console.log(formatTimeAgo(Date.now() - 15000)); // 15秒前
// console.log(formatTimeAgo(Date.now() - 65000)); // 1分钟前
// console.log(formatTimeAgo(Date.now() - 3600000)); // 1小时前
// console.log(formatTimeAgo(Date.now() - 86400000)); // 1天前
// console.log(formatTimeAgo('2023-01-01', {
//   dateFormat: 'yyyy年MM月dd日',
//   showTime: true
// })); // 2023年01月01日